package com.enjoyor.soa.traffic.api.ubms.service.dubbo;

import com.enjoyor.soa.traffic.api.ubms.dto.TrFlowDevInfoDto;
import com.enjoyor.soa.traffic.util.pojo.Page;
import com.enjoyor.soa.traffic.util.pojo.ResultPojo;

/**
 * 维护交通流量采集设备信息的Dubbo服务
 * @author yuankun
 * @version V1.0
 */
@SuppressWarnings("rawtypes")
public interface DubboTrFlowDevInfoService {
	
	/**
	 * 返回所有流量采集设备信息
	 * @return ResultPojo 所有流量采集设备信息
	 */
	public ResultPojo getTrFlowDevInfo();
	
	/**
	 * 根据状态编号获取设备信息
	 * @return ResultPojo 根据状态编号获取设备信息
	 */
	public ResultPojo getTrFlowDevInfoByStatusCode(String StatusCode);
	
	/**
	 * 返回所有流量采集设备信息，但不包含车道信息
	 * @return ResultPojo 所有流量采集设备信息
	 */
	public ResultPojo getTrFlowDevInfo2();
	
	/**
	 * 分页返回所有流量采集设备信息
	 * @param page 分页对象,条件通过map塞入page中
	 * @return ResultPojo 包含流量采集设备信息的分页对象
	 */
	public ResultPojo getPageTrFlowDevInfo(Page page);
	
	/**
	 * 分页返回所有流量采集设备信息，但不包含车道信息
	 * @param page 分页对象,条件通过map塞入page中
	 * @return ResultPojo 包含流量采集设备信息的分页对象
	 */
	public ResultPojo getPageTrFlowDevInfo2(Page page);
	
	/**
	 * 根据设备编码返回流量采集设备信息
	 * @param trfId 设备编码
	 * @return ResultPojo 流量采集设备信息
	 */
	public ResultPojo getTrFlowDevInfoById(String trfId);
	
	/**
	 * 根据设备编码分页返回流量采集设备信息
	 * @param trfId 设备编码
	 * @param page 分页对象
	 * @return ResultPojo 包含流量采集设备信息的分页对象
	 */
	public ResultPojo getPageTrFlowDevInfoById(String trfId, Page page);
	
	/**
	 * 按设备名称匹配并分页返回流量采集设备信息
	 * @param trfName 设备名称
	 * @param page 分页对象
	 * @return ResultPojo 包含流量采集设备信息的分页对象
	 */
	public ResultPojo getPageTrFlowDevInfoByDevName(String trfName, Page page);
	

	/**
	 * 按设备编码或者名称匹配并分页返回流量采集设备信息
	 * @param trfId 设备编码
	 * @param block 通过block可以实现blockId或blockName的同时查询流量采集设备信息
	 * @param page 分页对象
	 * @return ResultPojo 包含流量采集设备信息的分页对象
	 * 通过trfId可以实现设备id与name的同时查询流量采集设备信息，通过block可以实现blockId与blockName的对同时查询流量采集设备信息
	 */
	public ResultPojo getPageTrFlowDevInfoByIdName(String trfId,String block, Page page);
	
	
	/**
	 * 按设备编码或者名称匹配并分页返回流量采集设备信息
	 * @param model 设备型号
	 * @param project 建设期数
	 * @return ResultPojo 包含流量采集设备信息的分页对象
	 * 通过model与project同时可以实现查询流量采集设备信息
	 */
	public ResultPojo getTrFlowDevInfoByMProject(String project,String model);
	
	/**
	 * 根据设备类型分页返回流量采集设备信息
	 * @param devTypeCode 设备类型
	 * @param page 分页对象
	 * @return ResultPojo 包含流量采集设备信息的分页对象
	 */
	public ResultPojo getPageTrFlowDevInfoByDevType(String devTypeCode, Page page);
	
	/**
	 * 根据设备型号分页返回流量采集设备的信息
	 * @param model 设备型号
	 * @param page 分页对象
	 * @return ResultPojo 包含流量采集设备信息的分页对象
	 */
	public ResultPojo getPageTrFlowDevInfoByModel(String model, Page page);
	
	/**
	 * 根据所在区域分页返回流量采集设备的信息
	 * @param region 区域编码
	 * @param page 分页对象
	 * @return ResultPojo 包含流量采集设备信息的分页对象
	 */
	public ResultPojo getPageTrFlowDevInfoByRegion(String region, Page page);
	
	/**
	 * 根据通讯方式分页返回流量采集设备的信息
	 * @param commMode 通讯方式
	 * @param page 分页对象
	 * @return ResultPojo 包含流量采集设备信息的分页对象
	 */
	public ResultPojo getPageTrFlowDevInfoByCommMode(String commMode, Page page);
	
	/**
	 * 根据通讯参数值分页返回流量采集设备的信息
	 * @param commParam	通讯参数值
	 * @param page 分页对象
	 * @return ResultPojo 包含流量采集设备信息的分页对象
	 */
	public ResultPojo getPageTrFlowDevInfoByCommParam(String commParam, Page page);
	
	/**
	 * 根据设备类型和通讯参数值分页返回流量采集设备的信息
	 * @param devType 设备类型
	 * @param commParam	通讯参数值
	 * @param page 分页对象
	 * @return ResultPojo 包含流量采集设备信息的分页对象
	 */
	public ResultPojo getPageTrFlowDevInfoByDevTypeAndCommParam(String devType, String commParam, Page page);
	
	/**
	 * 根据设备类型和通讯参数值分页返回流量采集设备的信息
	 * @param devType 设备类型
	 * @param commParam	通讯参数值
	 * @return ResultPojo 包含流量采集设备信息的分页对象
	 */
	public ResultPojo getTrFlowDevInfoByManageDept(String manageDept);
	
	/**
	 * 返回与前缀相匹配的流量采集设备最大编码值，用于手工生成新的编码
	 * @param prefixTrfDevId 流量采集设备编码前缀
	 * @return String 与前缀相匹配的流量采集设备最大编码值
	 */
	public String getMaxTrfDevId(String prefixTrfDevId);
	
	/**
	 * 添加一条流量采集设备信息
	 * @param token 以逗号分隔的输入信息，如用户名等
	 * @param trFlowDevInfoDto 流量采集设备信息
	 * @return ResultPojo 添加结果
	 */
	public ResultPojo addTrFlowDevInfo(String token, TrFlowDevInfoDto trFlowDevInfoDto);
	
	/**
	 * 修改一条流量采集设备信息
	 * @param token 以逗号分隔的输入信息，如用户名等
	 * @param trFlowDevInfoDto 流量采集设备信息
	 * @return ResultPojo 修改结果
	 */
	public ResultPojo editTrFlowDevInfo(String token, TrFlowDevInfoDto trFlowDevInfoDto);
	
	/**
	 * 删除指定编码的流量采集设备信息
	 * @param token 以逗号分隔的输入信息，如用户名等
	 * @param trfDevId 设备编码
	 * @return ResultPojo 删除结果
	 */
	public ResultPojo removeTrFlowDevInfo(String token, String trfDevId);
	
	
	
	
	/**
	 * 
	 * @param trfDevId 设备编号
	 * @param trfDevName 设备名称
	 * @param devTypeCode 设备类型编号
	 * @param model  设备型号编码
	 * @param region 区域
	 * @param deviceStatusCode 设备状态编号
	 * @param commModeCode 
	 * @param commParam ip
	 * @param project 期数
	 * @param manufact 品牌
	 * @param manageDept 管理部门
	 * @param orderSeq 
	 * @return ResultPojo 分页信息
	 */
	public ResultPojo getTrFlowDevInfoList(String trfDevId, String trfDevName,
			String devTypeCode, String model, String region, String deviceStatusCode, String commModeCode,
			String commParam, String project, String manufact, String manageDept, String orderSeq);


	public ResultPojo getTrFlowDevName(String trfDevId, String trfDevName);

	/**
	 * 
	 * @param trfDevId 设备编号
	 * @param trfDevName 设备名称
	 * @param devTypeCode 设备类型编号
	 * @param model  设备型号编码
	 * @param region 区域
	 * @param deviceStatusCode 设备状态编号
	 * @param commModeCode 
	 * @param commParam ip
	 * @param project 期数
	 * @param manufact 品牌
	 * @param manageDept 管理部门
	 * @param netMode 
	 * @param orderSeq 
	 * @param page
	 * @return ResultPojo 分页信息
	 */
	public ResultPojo getPageTrFlowDevInfoList(String trfDevId, String trfDevName, String letterAbbr,
			String devTypeCode, String model, String region, String deviceStatusCode, String commModeCode,
			String commParam, String project, String manufact, String manageDept, String orderSeq, String netMode,
			Page page);
}
